from django.shortcuts import render
# 导入类
from userweb.models import Role, Permission
# 导入JsonResponse
from django.http import JsonResponse
import json


def index(request):
    return render(request, 'user/role.html')


def list_values(request):
    # 接收传递的值
    page = int(request.POST.get('page'))
    limit = int(request.POST.get('limit'))
    q_str = request.POST.get('inputStr')
    # 获取符合条件的角色
    objs = list(Role.objects.filter(name__icontains=q_str).values('id', 'name', 'desc'))
    # 分页
    one_page_data = objs[(page - 1) * limit: page * limit]
    # 返回
    return JsonResponse({'code':0, 'count': len(objs), 'data': one_page_data})


def add_value(request):
    # 接收传递的值
    rec = request.POST
    # 定义返回的数据结构
    res = {'status': True}
    # 异常处理
    try:
        Role.objects.create(name=rec.get('name'), desc=rec.get('desc'))
    except Exception as e:
        res['status'] = False
        res['error'] = "添加角色提交到数据库出现异常，请联系管理员"
    return JsonResponse(res)


def edit_value(request):
    # 接收传递的值
    rec = request.POST
    # 定义返回的数据结构
    res = {'status': True}
    # 异常处理
    try:
        # 获取当前操作的对象
        obj = Role.objects.get(id=rec.get('id'))
        # 逐一修改
        obj.name = rec.get('name')
        obj.desc = rec.get('desc')
        obj.save()
    except Exception as e:
        res['status'] = False
        res['error'] = "修改角色提交到数据库出现异常，请联系管理员"
    return JsonResponse(res)


def del_value(request):
    # 接收传递的值
    id = request.POST.get('id')
    # 定义返回的数据结构
    res = {'status': True}
    # 异常处理
    try:
        # 获取当前操作的对象
        Role.objects.filter(id=id).first().delete()
    except Exception as e:
        res['status'] = False
        res['error'] = "删除角色提交到数据库出现异常，请联系管理员"
    return JsonResponse(res)


def is_exists_role_name(request):
    """判断当前的角色名是否存在"""
    name = request.POST.get('name')
    is_exists = Role.objects.filter(name=name).exists()
    if is_exists:
        return JsonResponse({'status': True})
    else:
        return JsonResponse({'status': False})



def get_values(request):
    """为下拉多选框提供数据"""
    objs = Role.objects.all().values('id', 'name')
    # 定义一个集合
    roles_list = []
    # 遍历
    for item in objs:
        roles_list.append({'name': item.get('name'),'value': item.get('id')})

    # 返回
    return JsonResponse({'data': roles_list})


def update_permission(request):
    # 接收数据
    role = request.POST.get('role')
    add_list = json.loads(request.POST.get('add'))
    remove_list = json.loads(request.POST.get('remove'))

    # 定义返回值类型
    res = {'status': True}

    # 异常处理提交
    try:
        # 先获取相应的角色
        role_obj = Role.objects.get(id=role)
        # 删除权限 --- remove_list
        for item in remove_list:
            obj = Permission.objects.filter(order=item).first()
            obj.role.remove(role_obj)

        # 添加权限 --- add_list
        for item in add_list:
            obj = Permission.objects.filter(order=item).first()
            obj.role.add(role_obj)

    except Exception as e:
        res['status'] = False
        res['error'] = "修改权限提交到数据库出现异常，具体原因：" + str(e)


    return JsonResponse(res)
